/// [Self powers](https://projecteuler.net/problem=48)
use problem_48::LastTen;

fn main() {
    let sum = (1..=1000)
        .map(|x| LastTen::new(x).pow(x))
        .fold(LastTen::new(0), |s, x| s + x);
    println!("The last ten digits of the series: {}", sum.data);
}

#[cfg(test)]
mod test {
    use super::*;
    #[test]
    fn mul() {
        assert_eq!(LastTen::new(3).pow(3).data, 27);
        assert_eq!(LastTen::new(10).pow(10).data, 0);
    }
    #[test]
    fn sum() {
        assert_eq!(
            (1..=10)
                .map(|x| LastTen::new(x).pow(x))
                .fold(LastTen::new(0), |s, x| s + x)
                .data,
            405071317
        );
    }
}
